#include <iostream>
#include <bitset>
#include <iomanip>

void demonstrate_binary_literals() {
    // C++14引入二进制字面量，使用0b或0B前缀
    int a = 0b1010;  // 二进制表示10
    int b = 0B1100;  // 二进制表示12

    std::cout << "  二进制字面量演示:\n";
    std::cout << "  0b1010 = " << a << " (十进制)\n";
    std::cout << "  0B1100 = " << b << " (十进制)\n";

    // 与十六进制和八进制对比
    std::cout << "\n  不同进制表示同一数值 (42):\n";
    int decimal = 42;
    int binary = 0b101010;
    int octal = 052;
    int hex = 0x2A;

    std::cout << "  十进制: " << decimal << '\n';
    std::cout << "  二进制: 0b101010 = " << binary << '\n';
    std::cout << "  八进制: 052 = " << octal << '\n';
    std::cout << "  十六进制: 0x2A = " << hex << '\n';

    // 位运算示例
    std::cout << "\n  使用二进制字面量进行位运算:\n";
    int mask1 = 0b0000'1111;  // 位掩码，使用引号分隔符提高可读性
    int mask2 = 0b1111'0000;
    int value = 0b1010'1010;
    
    std::cout << "  值      = 0b" << std::bitset<8>(value) << '\n';
    std::cout << "  掩码1    = 0b" << std::bitset<8>(mask1) << '\n';
    std::cout << "  掩码2    = 0b" << std::bitset<8>(mask2) << '\n';
    std::cout << "  值 & 掩码1 = 0b" << std::bitset<8>(value & mask1) << '\n';
    std::cout << "  值 & 掩码2 = 0b" << std::bitset<8>(value & mask2) << '\n';
    std::cout << "  值 | 掩码1 = 0b" << std::bitset<8>(value | mask1) << '\n';
    std::cout << "  值 ^ 掩码1 = 0b" << std::bitset<8>(value ^ mask1) << '\n';
} 